﻿using System;

// 委托
delegate int NumberChanger(int n);
namespace DelegateAppl2 {
    class TestDelegate {
        static int num = 10;
        public static int AddNum(int p) {
            num += p;
            return num;
        }

        public static int MultNum(int q) {
            num *= q;
            return num;
        }
        public static int getNum() {
            return num;
        }

        static void Main(string[] args) {
            // 创建委托实例
            NumberChanger nc;
            NumberChanger nc1 = new NumberChanger(AddNum);
            NumberChanger nc2 = new NumberChanger(MultNum);
            nc = nc1;
            nc += nc2;
            // 调用多播，虽然这里是多播，
            // 但是只会有一个返回值，调用顺序为：AddNum方法，这个时候已经更新过 num 的值了，此时 num 的值为15
            //然后再调用 MultNum 方法，num 的返回值会作为入参(也就是15)，那么结果就是75
            nc(5);
            //这里的结果为 55 ，先执行的 MultNum ，再执行的 AddNum 方法
            //nc = nc2;
            //nc += nc1;
            //nc(5);
            Console.WriteLine("Value of Num: {0}", getNum());
            Console.ReadKey();
        }
    }
}